package main

import "fmt"

func main() {
	// 变量声明
	// 1. 标准格式
	// var 变量名 变量类型
	// var a int
	// var b string
	// a = 10
	// b = "hello"
	// 2. 类型推导
	//声明变量时,变量类型可以省略,Go语言会根据值的类型来推断变量的类型
	// var a = 10
	// var b = "hello"
	// 3. 简短格式
	// a := 10
	// b := "hello"
	// 4. 批量声明
	// var (
	// 	a int
	// 	b string
	// )
	var a int = 2
	var b string = 	"hello"
	
	fmt.Println(a, b)
	//变量存储的值可以改变,但是变量的类型不能改变
	a = 4
	b = "world"
	fmt.Println(a, b)	
    //声明变量时不赋值值,变量的值为0,变量的类型为空
	var n1 int //0
	var s1 string //""
	fmt.Println(n1, s1)
	s1 = "tedu"
	fmt.Println(s1)
	// 声明多个变量
	var n2, n3 int // 0,0,
	fmt.Println(n2, n3)
	var (
		s2 string = "hello"
		s3 string = "world"
	)
	fmt.Println(s2, s3)
	//命名规则:
	// 1. 有语义 
	// 2.可以用字母,数字,下划线组成
	// 3.不能以数字开头
	// 4.不能使用关键字
    //短变量: :=
	// 1. 只能在函数内部使用
	// 2. 只能在函数内部声明变量
	// 3. 不能使用关键字
	// 4. 不能使用已经声明过的变量
	// 5. 不能使用已经声明过的常量
	userName := "tedu" // 等价于 var userName string = "tedu"
	age := 18.5 // 等价于 var age float64 = 18.5
	fmt.Println(userName, age)
	userName, age = "tedu", 18.5 // 等价于 userName = "tedu", age = 18.5
	fmt.Println(userName, age)		
	fmt.Println("===========================")	
	//匿名变量: _
	name, _ := "tedu", 18.5
	fmt.Println(name)	
	// 匿名变量不能被使用,但是可以被赋值
	_, age = "tedu", 18.5
	fmt.Println(age)	
	// 变量的声明和赋值可以放在同一个语句中
	
	
} 